草庐IT

Java getNodeName 和命名空间

全部标签

C++ 什么时候可以扩展 `std` 命名空间?

SO上的一个线程说extendingstdisUB(好吧,当然除非你是标准的作家)。但时不时地,std会被愉快地扩展。什么时候可以这样做? 最佳答案 可以将定义添加到std命名空间的唯一情况是对命名空间中已存在的模板进行特化,并显式实例化一个模板。但是,仅当它们依赖于用户定义的类型时。[namespace.std](标准草案):ThebehaviorofaC++programisundefinedifitaddsdeclarationsordefinitionstonamespacestdortoanamespacewithinna

c++ - 详细命名空间中的 using 指令是否有问题?

考虑这个库头:#include#include#includenamespaceLib{namespacedetail{usingnamespacestd;templatevoidsort_impl(istream&in,ostream&out){vectorv;{intn;in>>n;v.resize(n);}for(auto&i:v)cin>>i;sort(v.begin(),v.end());for(autoi:v)out(std::cin,std::cout);}}在此示例中,detail命名空间是否成功地将库的客户端(以及库的其余实现)与using-directive隔离开来

c++ - 当编译时已知引用占用非聚合结构中的空间时,是否错过了优化?

注意:这是一个后续问题:Isitamissedoptimization,whenacompile-timeknownreferencetakesspaceinastruct?,这表明聚合初始化可以将b的默认初始化替换为对a的引用,方法是使它成为对某个其他变量的引用。这个问题是关于当聚合初始化不可能时会发生什么。看这个例子:structFoo{inta;int&b;Foo():b(a){}};如果sizeof(Foo)!=sizeof(int)是否错过了优化?我的意思是,编译器能否从结构中删除b,因为它总是引用a?有什么可以阻止编译器进行这种转换吗?(注意,structFoo看起来就是这

c++ - 使用 sfinae 测试命名空间成员是否存在

我试图弄清楚是否可以使用sfinae来测试namespace成员的存在。谷歌对此保持沉默。我已经尝试了以下代码,但它失败了。namespacexyz{structabc{};}structabc{};structtest_xyz{typedefcharyes;typedefstruct{chara[2];}no;templatestaticyestest(xyz::C=xyz::C());//letsassumeithasdefaultconstructortemplatestaticnotest(...);constboolhas_abc=sizeof(test_xyz::test(

c++ - pimpl 是否与匿名命名空间兼容?

我正在尝试使用pimpl模式并在匿名命名空间中定义实现类。这在C++中可能吗?我失败的尝试如下所述。是否可以在不将实现移动到具有名称(或全局名称)的namespace的情况下解决此问题?classMyCalculatorImplementation;classMyCalculator{public:MyCalculator();intCalculateStuff(int);private:MyCalculatorImplementation*pimpl;};namespace//Ifiomitthenamespace,everythingisOK{classMyCalculatorIm

c++ - 'private'访问修饰符是否给了编译器更大的优化空间?

它是否允许编译器内联它,知道只有同一个类中的函数才能访问它?还是只是为了程序员的方便? 最佳答案 编译器可以(但不是必须)按照您的建议进行优化,但这不是要点。访问修饰符的目的是在编译时捕获某些类(没有双关语)的编程错误。私有(private)函数是这样的函数,如果有人从类外部调用它们,那将是一个错误,您希望尽早了解它。(任何时候你问“编译器是否可以根据可用的信息进行优化”这个问题,答案都是“是的,除非标准中有特定的规则说不允许”(例如volatile的规则,其全部目的是抑制优化)。然而,编译器不一定打扰根据任何给定的信息进行优化。毕

c++ - 为什么我将函数命名为 `swap` 时会出现模板错误,但 `Swap` 没问题?

好的,这是程序,绝对正确#includeusingnamespacestd;templatevoidSwap(T&a,T&b);intmain(){inti=10;intj=20;coutvoidSwap(T&a,T&b){Ttemp;temp=a;a=b;b=temp;}但是当我将函数的名称从Swap更改为swap它产生一个错误说error:callofoverloaded'swap(int&,int&)'isambiguous|note:candidatesare:voidswap(T&,T&)[withT=int]|||===Buildfinished:1errors,0warn

c++ - 在 C 或 C++ 中的 3D 空间实现中从 3 个点构建圆

我们有3(三)个xyz点在3D空间中定义一个圆,这个圆需要转换成折线(用于进一步渲染)。我正在寻找可以完成这项工作的现成C或C++函数或免费库。不明白为什么this关门了。我什至不能在那里回答我自己的问题。为你们感到羞耻。但你不会阻止知识的传播! 最佳答案 在真实3D中找到圆参数有一个更简单的解决方案,只需看看http://en.wikipedia.org/wiki/Circumscribed_circle中的“重心坐标”部分即可。.您可以从中提取以下优化代码://triangle"edges"constVector3dt=p2-p

c# - c++ - 使用 std 命名空间和依赖项

在尝试熟悉C++及其概念时,我遇到了usingnamespacestd和#include我的简单代码如下#include"stdafx.h"#include"ConsoleApplication5.h"#includeintmain(){std::cout使用使用intellisense的VisualStudio2015Community显示cout使用以下内容std::ostreamstd::cout作为一名C#程序员,这让我有些困惑。这是:std::ostream作为返回类型而std::cout是传递的方法/参数还是std::ostream依赖于cout更新(在Archimared

c++ - C++命名空间的困扰

好的,这个问题有所发展,我想尝试着(从)开始为我所追求的基本目标:创建用于包装C++资源获取中的传统C语言实体的库代码是初始化的,还提供了基本或更好的异常保证。允许此代码的客户端以非常自然的C++方式使用它,而不会给现有代码带来很多开销,从而无法将其转换为使用C++包装器对象(即自动转换为适当的旧类型,采用旧类型的构造函数,等)限制库代码对namespace的影响。理想情况下,该库将具有几个子命名空间,这些子命名空间提供相关的功能,这些功能会限制使用命名空间X类型声明的数量和影响-就像boost库所做的一样(即,使用details命名空间仅注入(inject)用户合理想要的那些符号使用